﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cspl.Calculator.Lab.Interface;
using Cspl.Calculator.Lab.Model;

namespace Cspl.Calculator.Lab
{
	public class MainCalculator
	{
	
		#region Private Fields

		private IBasicCalculator _calculator;
		private CalModel _data;

		#endregion

		#region Constructor

		public MainCalculator()
		{
			this._calculator = new BasicCalculator();
		}

		#endregion

		#region Properties

		public CalModel Data
		{
			get { return _data;}
			set { _data = value;}
		}

		#endregion

		#region Methods

		public int Calculate()
		{
			int result = 0;
			if(this.Data != null)
			{
				if (this.Data.Operation == Single)
				{
					switch (this.Data.Operation)
					{
						case CalOperation.Add:
							result = this._calculator.Add(this.Data.IntegerValue1,
								this.Data.IntegerValue2);
							break;
						case CalOperation.Sub:
							result = this._calculator.Sub(this.Data.IntegerValue1,
								this.Data.IntegerValue2);
							break;
						case CalOperation.Mul:
							result = this._calculator.Mul(this.Data.IntegerValue1,
								this.Data.IntegerValue2);
							break;
						case CalOperation.Div:
							result = this._calculator.Div(this.Data.IntegerValue1,
								this.Data.IntegerValue2);
							break;
					}
				}
				else 
				{
					result = this._calculator.ComplexListOperation(this.Data.ListOfIntegerValue,
						this.Data.Operation);
				}
			}
			else
			{
				Console.WriteLine("There is no data to be calculated.");
			}
			return result;
		}
		#endregion
	}

	public enum CalOperation { Add, Mul, Div, Sub }
	public enum CalMode { single, Double }
}
